/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GuiDadosLocacao.java
 *
 * Created on 13/11/2011, 17:13:34
 */
package view.gui;

import controller.ControllerLocacao;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;
import model.dominio.Cliente;
import model.dominio.Locacao;
import model.dominio.Motorista;
import model.dominio.Veiculo;

/**
 *
 * @author Rodrigo
 * Classe responsável pelo tratamento de dados de Locação.
 * Tal tratamento é referente a possibilidade de Cadastro ou Edição do objeto em questão.
 * 
 */
public class GuiDadosDevolucao  extends JInternalFramePermissao {

   private static Locacao locacao;

   /** Creates new form GuiDadosLocacao */
   /**
    * Construtor da interface gráfica para o tratamento de dados.
    * @throws MaskFormatter
    * Exceção lançada quando a data utilizada não está no formato correto.
    */
   public GuiDadosDevolucao(Locacao locacao) {
      this.locacao = locacao;
      initComponents();
      SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
      data.setText(formatador.format(Calendar.getInstance().getTime()));
      dataSaida.setText(formatador.format(locacao.getDataSaida().getTime()));
      previsaoDias.setText(locacao.getPrevisaoDias() + "");
      kmSaida.setText(locacao.getKmSaida() + "km");
      preencheVeiculo(locacao.getVeiculo());
      preencheCliente(locacao.getCliente());

      for (Motorista m : locacao.getMotoristas()) {
	addMotorista(m);
      }
   }

   /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
   @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        painelCliente = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        cpfCliente = new javax.swing.JLabel();
        nomeCliente = new javax.swing.JLabel();
        telefoneCliente = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel13 = new javax.swing.JLabel();
        painelVeiculo = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        placaVeiculo = new javax.swing.JLabel();
        marcaVeiculo = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        modeloVeiculo = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        baseVeiculo = new javax.swing.JLabel();
        unicaVeiculo = new javax.swing.JLabel();
        precoKmVeiculo = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        corVeiculo = new javax.swing.JLabel();
        painelLocacao = new javax.swing.JPanel();
        jLabel10 = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();
        data = new javax.swing.JFormattedTextField();
        jLabel14 = new javax.swing.JLabel();
        jLabel15 = new javax.swing.JLabel();
        jLabel17 = new javax.swing.JLabel();
        jLabel18 = new javax.swing.JLabel();
        tipoLocacao = new javax.swing.JLabel();
        previsaoDias = new javax.swing.JLabel();
        dataSaida = new javax.swing.JLabel();
        kmSaida = new javax.swing.JLabel();
        kilometragem = new javax.swing.JFormattedTextField();
        Cancelar = new javax.swing.JButton();
        Cadastrar = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabelaMotoristas = new javax.swing.JTable();
        total = new javax.swing.JLabel();
        jLabel16 = new javax.swing.JLabel();

        setClosable(true);
        getContentPane().setLayout(null);

        painelCliente.setBorder(javax.swing.BorderFactory.createTitledBorder("Cliente"));
        painelCliente.setLayout(null);

        jLabel1.setText("Nome:");
        painelCliente.add(jLabel1);
        jLabel1.setBounds(20, 30, 40, 20);
        painelCliente.add(cpfCliente);
        cpfCliente.setBounds(80, 60, 110, 20);
        painelCliente.add(nomeCliente);
        nomeCliente.setBounds(80, 30, 190, 20);
        painelCliente.add(telefoneCliente);
        telefoneCliente.setBounds(80, 90, 90, 20);

        jLabel6.setText("Telefone:");
        painelCliente.add(jLabel6);
        jLabel6.setBounds(20, 90, 60, 20);

        jLabel13.setText("CPF:");
        painelCliente.add(jLabel13);
        jLabel13.setBounds(20, 60, 40, 20);

        getContentPane().add(painelCliente);
        painelCliente.setBounds(0, 0, 290, 120);

        painelVeiculo.setBorder(javax.swing.BorderFactory.createTitledBorder("Veículo"));
        painelVeiculo.setLayout(null);

        jLabel3.setText("Placa:");
        painelVeiculo.add(jLabel3);
        jLabel3.setBounds(20, 30, 50, 20);
        painelVeiculo.add(placaVeiculo);
        placaVeiculo.setBounds(70, 30, 70, 20);
        painelVeiculo.add(marcaVeiculo);
        marcaVeiculo.setBounds(70, 60, 100, 20);

        jLabel4.setText("Marca:");
        painelVeiculo.add(jLabel4);
        jLabel4.setBounds(20, 60, 50, 20);

        jLabel5.setText("Modelo:");
        painelVeiculo.add(jLabel5);
        jLabel5.setBounds(20, 90, 50, 20);
        painelVeiculo.add(modeloVeiculo);
        modeloVeiculo.setBounds(70, 90, 100, 20);

        jLabel7.setText("Tarifa Base:");
        painelVeiculo.add(jLabel7);
        jLabel7.setBounds(170, 30, 70, 20);

        jLabel8.setText("Tarifa única:");
        painelVeiculo.add(jLabel8);
        jLabel8.setBounds(170, 90, 70, 20);

        jLabel9.setText("Preço p/ km:");
        painelVeiculo.add(jLabel9);
        jLabel9.setBounds(170, 60, 70, 20);
        painelVeiculo.add(baseVeiculo);
        baseVeiculo.setBounds(250, 60, 80, 20);
        painelVeiculo.add(unicaVeiculo);
        unicaVeiculo.setBounds(250, 90, 80, 20);
        painelVeiculo.add(precoKmVeiculo);
        precoKmVeiculo.setBounds(250, 30, 80, 20);

        jLabel11.setText("Cor: ");
        painelVeiculo.add(jLabel11);
        jLabel11.setBounds(330, 30, 40, 20);
        painelVeiculo.add(corVeiculo);
        corVeiculo.setBounds(360, 30, 100, 20);

        getContentPane().add(painelVeiculo);
        painelVeiculo.setBounds(290, 0, 470, 120);

        painelLocacao.setBorder(javax.swing.BorderFactory.createTitledBorder("Dados de locação"));
        painelLocacao.setLayout(null);

        jLabel10.setText("Tipo de Locação:");
        painelLocacao.add(jLabel10);
        jLabel10.setBounds(20, 30, 100, 20);

        jLabel12.setText("Data: ");
        painelLocacao.add(jLabel12);
        jLabel12.setBounds(20, 160, 100, 30);

        try {
            data.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        data.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                dataFocusLost(evt);
            }
        });
        painelLocacao.add(data);
        data.setBounds(120, 160, 100, 30);

        jLabel14.setText("Kilometragem: ");
        painelLocacao.add(jLabel14);
        jLabel14.setBounds(20, 120, 100, 30);

        jLabel15.setText("Kilometragem da saida: ");
        painelLocacao.add(jLabel15);
        jLabel15.setBounds(20, 90, 140, 20);

        jLabel17.setText("Data da saída: ");
        painelLocacao.add(jLabel17);
        jLabel17.setBounds(160, 60, 90, 20);

        jLabel18.setText("Previsão de dias: ");
        painelLocacao.add(jLabel18);
        jLabel18.setBounds(20, 60, 100, 20);
        painelLocacao.add(tipoLocacao);
        tipoLocacao.setBounds(110, 30, 150, 20);

        previsaoDias.setText("0");
        painelLocacao.add(previsaoDias);
        previsaoDias.setBounds(120, 60, 30, 20);

        dataSaida.setText("DD/MM/AAAA");
        painelLocacao.add(dataSaida);
        dataSaida.setBounds(250, 60, 80, 20);
        painelLocacao.add(kmSaida);
        kmSaida.setBounds(160, 90, 120, 20);

        kilometragem.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("###0"))));
        kilometragem.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                kilometragemFocusLost(evt);
            }
        });
        painelLocacao.add(kilometragem);
        kilometragem.setBounds(120, 120, 100, 30);

        getContentPane().add(painelLocacao);
        painelLocacao.setBounds(0, 120, 340, 200);

        Cancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/cancelar.png"))); // NOI18N
        Cancelar.setText("Cancelar");
        Cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CancelarActionPerformed(evt);
            }
        });
        getContentPane().add(Cancelar);
        Cancelar.setBounds(400, 330, 140, 60);

        Cadastrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/salvar.png"))); // NOI18N
        Cadastrar.setText("Cadastrar");
        Cadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CadastrarActionPerformed(evt);
            }
        });
        getContentPane().add(Cadastrar);
        Cadastrar.setBounds(230, 330, 140, 60);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Motoristas"));
        jPanel1.setLayout(null);

        tabelaMotoristas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nome", "CPF", "CNH"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabelaMotoristas.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1.setViewportView(tabelaMotoristas);

        jPanel1.add(jScrollPane1);
        jScrollPane1.setBounds(10, 20, 390, 100);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(350, 120, 410, 130);

        total.setFont(new java.awt.Font("Tahoma", 1, 24));
        total.setForeground(new java.awt.Color(0, 0, 255));
        total.setText("R$ 00,00");
        total.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        getContentPane().add(total);
        total.setBounds(480, 260, 220, 50);

        jLabel16.setFont(new java.awt.Font("Tahoma", 1, 24));
        jLabel16.setText("TOTAL:");
        jLabel16.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        getContentPane().add(jLabel16);
        jLabel16.setBounds(360, 260, 110, 50);

        setBounds(0, 0, 781, 427);
    }// </editor-fold>//GEN-END:initComponents

    private void CancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelarActionPerformed
       this.dispose();
    }//GEN-LAST:event_CancelarActionPerformed

    private void CadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CadastrarActionPerformed
       if (kilometragem.getText().isEmpty() || data.getText().equals("  /  /    ")){
	 JOptionPane.showMessageDialog(null, "Campos de Kiloetragem e Data são obrigatórios!", "Falha.", JOptionPane.ERROR_MESSAGE);
	 return;
       }

       locacao.setDataDevolucao(data.getText());
       locacao.setKmEntrada(Long.parseLong(kilometragem.getText()));
       locacao.calcularValorLocacao();
       if (ControllerLocacao.salvar(locacao)) {
	 JOptionPane.showMessageDialog(null, "Dados da locação registrados com sucesso!", "Sucesso.", JOptionPane.INFORMATION_MESSAGE);
	 this.dispose();
       } else {
	 JOptionPane.showMessageDialog(null, "Falha ao registrar os dados da locação!", "Falha.", JOptionPane.ERROR_MESSAGE);
       }
    }//GEN-LAST:event_CadastrarActionPerformed

    private void kilometragemFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_kilometragemFocusLost
       DecimalFormat nf = new DecimalFormat("###,###.00");
       try {
	 if (!kilometragem.getText().equals("") && !data.getText().equals("  /  /    ")) {
	    locacao.setKmEntrada(Long.parseLong(kilometragem.getText()));
	    locacao.setDataDevolucao(data.getText());
	    if (locacao.calcularValorLocacao() == 0) {
	       total.setText("R$ 00,00");
	    } else {
	       total.setText("R$ " + nf.format(locacao.calcularValorLocacao()));
	    }
	 }
       } catch (NumberFormatException e) {
	 JOptionPane.showMessageDialog(null, "Kilometragem incorreta", "ERRO", JOptionPane.ERROR_MESSAGE);
	 kilometragem.requestFocus();
       }
    }//GEN-LAST:event_kilometragemFocusLost

    private void dataFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_dataFocusLost
       DecimalFormat nf = new DecimalFormat("###,###.00");
       if (!kilometragem.getText().equals("") && !data.getText().equals("  /  /    ")) {
	 locacao.setKmEntrada(Long.parseLong(kilometragem.getText()));
	 locacao.setDataDevolucao(data.getText());
	 if (locacao.calcularValorLocacao() == 0) {
	    total.setText("R$ 00,00");
	 } else {
	    total.setText("R$ " + nf.format(locacao.calcularValorLocacao()));
	 }

       }
    }//GEN-LAST:event_dataFocusLost
   public static void preencheCliente(Cliente c) {
      nomeCliente.setText(c.getNome());
      cpfCliente.setText(c.getCpf());
      telefoneCliente.setText(c.getTelefone());
   }

   public static void preencheVeiculo(Veiculo v) {
      DecimalFormat nf = new DecimalFormat("###,###.00");
      marcaVeiculo.setText(v.getMarca());
      placaVeiculo.setText(v.getPlaca().toUpperCase());
      modeloVeiculo.setText(v.getModelo());
      corVeiculo.setText(v.getCor());
      unicaVeiculo.setText("R$ " + nf.format(v.getTipo().getTaxaUnica()));

      baseVeiculo.setText("R$ " + nf.format(v.getTipo().getPrecoBase()));

      if (v.getTipo().getPrecoKm() >= 1.0) {
	precoKmVeiculo.setText("R$ " + nf.format(v.getTipo().getPrecoBase()));
      } else {
	precoKmVeiculo.setText("R$ 0" + nf.format(v.getTipo().getPrecoKm()));
      }
   }

   public static void addMotorista(Motorista motorista) {
      DefaultTableModel dtm = (DefaultTableModel) tabelaMotoristas.getModel();

      String[] s = new String[3];
      s[0] = motorista.getNome();
      s[1] = motorista.getCpf();
      s[2] = motorista.getCnh();

      dtm.addRow(s);


   }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Cadastrar;
    private javax.swing.JButton Cancelar;
    private static javax.swing.JLabel baseVeiculo;
    private static javax.swing.JLabel corVeiculo;
    private static javax.swing.JLabel cpfCliente;
    private javax.swing.JFormattedTextField data;
    private javax.swing.JLabel dataSaida;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel17;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JFormattedTextField kilometragem;
    private javax.swing.JLabel kmSaida;
    private static javax.swing.JLabel marcaVeiculo;
    private static javax.swing.JLabel modeloVeiculo;
    private static javax.swing.JLabel nomeCliente;
    private javax.swing.JPanel painelCliente;
    private javax.swing.JPanel painelLocacao;
    private javax.swing.JPanel painelVeiculo;
    private static javax.swing.JLabel placaVeiculo;
    private static javax.swing.JLabel precoKmVeiculo;
    private javax.swing.JLabel previsaoDias;
    private static javax.swing.JTable tabelaMotoristas;
    private static javax.swing.JLabel telefoneCliente;
    private javax.swing.JLabel tipoLocacao;
    private javax.swing.JLabel total;
    private static javax.swing.JLabel unicaVeiculo;
    // End of variables declaration//GEN-END:variables

    @Override
    public int getPermissao() {
        return 19;
    }
}
